<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 异步代码分："宏", "微" 


        // 事件循环： 
        // JS代码执行的时候 会先检查语法 
        // 将所有的代码 统一推入执行栈 
        // 执行栈开始一条一条按照顺序从上往下 从右往左执行代码
        // 遇见定时器延时器就开启(不等待) 然后继续往下
        // 遇见Promise代码就立刻执行 
        // 按照这个规则执行完毕 
        // 此时执行栈清空

        // 此时会去微任务队列中检查是否有待执行的代码 如果有就拿一个出来 并执行掉 重复此步骤 直到微任务队列清空
        // 此时会去宏任务队列中检查是否有待执行的代码 如果有就那一个出来 并执行掉 检查微任务队列 重复此步骤 直到宏任务队列清空
        // 至此浏览器的线程才会闲置



        // 出题: 请说出以下代码的执行顺序
        // setTimeout(function () {
        //     console.log("延时器")
        // }, 0)

        // var p = new Promise(function (resolve, reject) {
        //     console.log(1)
        //     setTimeout(function () {
        //         resolve()
        //     }, 0)
        // })

        // console.log(2)
        // p.then(function () {
        //     console.log("成功")
        // })
        // console.log(4)




        // 出题:请说出以下代码的执行顺序
        // console.log(5)
        // var  p = new Promise((resolve, reject) => {
        //     resolve();
        // })

        // p.then(function() {
        //     console.log(1)   
        //     return new Promise((resolve) => resolve()) 
        // })

        // .then(function() {
        //     console.log(2);
        //     setTimeout(function() {
        //         console.log(3)
        //         Promise.resolve().then(function() {
        //             console.log(8)
        //         })
        //     }, 0)
        // })

        // console.log(6)
        

        // setTimeout(function() {
        //     console.log(4);
        //     Promise.resolve().then(function() {
        //         console.log(7)
        //     })
        // }, 0)

        



      
    </script>
</body>

</html>